import org.apache.commons.io.FileUtils;
import org.openqa.selenium.OutputType;
import org.openqa.selenium.TakesScreenshot;
import org.openqa.selenium.WebDriver;

import java.io.File;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;

public class ScreenshotUtils {

    /**
     * 截图并保存到默认路径（项目根目录下）
     * @param driver WebDriver 实例
     * @param fileName 截图文件名（不含扩展名）
     * @return 截图文件的绝对路径
     */
    public static String captureScreenshot(WebDriver driver, String fileName) {
        return captureScreenshot(driver, fileName, "./");
    }

    /**
     * 截图并保存到指定路径
     * @param driver WebDriver 实例
     * @param fileName 截图文件名（不含扩展名）
     * @param saveDir 保存目录路径
     * @return 截图文件的绝对路径
     */
    public static String captureScreenshot(WebDriver driver, String fileName, String saveDir) {
        // 创建保存目录（如果不存在）
        File directory = new File(saveDir);
        if (!directory.exists()) {
            directory.mkdirs();
        }

        // 生成带时间戳的完整文件名
        String timestamp = new SimpleDateFormat("yyyyMMdd_HHmmss").format(new Date());
        String fullFileName = fileName + "_" + timestamp + ".png";
        String filePath = saveDir + File.separator + fullFileName;

        try {
            // 执行截图
            File screenshotFile = ((TakesScreenshot) driver).getScreenshotAs(OutputType.FILE);
            // 保存截图到指定位置
            FileUtils.copyFile(screenshotFile, new File(filePath));
            return filePath;
        } catch (IOException e) {
            System.err.println("截图失败: " + e.getMessage());
            return null;
        }
    }

    /**
     * 截图并按测试用例命名保存（自动生成路径：./screenshots/测试类名/测试方法名/时间戳.png）
     * @param driver WebDriver 实例
     * @param testClassName 测试类名
     * @param testMethodName 测试方法名
     * @return 截图文件的绝对路径
     */
    public static String captureScreenshotForTestCase(WebDriver driver, String testClassName, String testMethodName) {
        String saveDir = "D:\\C++\\gitee\\java-learning\\java-learning\\JAVAEE\\SeleniumTest1\\src\\test\\java" + testClassName + "/" + testMethodName;
        return captureScreenshot(driver, testMethodName, saveDir);
    }
}